package com.yulang.design_pattern_23.singleton;

public class LazySingleton {

    private volatile static LazySingleton instance;

    private LazySingleton(){}

    /**
     * 采用double check的方式保证多线程下的单例模式可用
     * 但是改方式仍然存在空指针的问题(指令重排引起的所以要加volatile防止指令重排序)
     * @return
     */
    public static LazySingleton getInstance(){
        if(instance == null){
            synchronized (LazySingleton.class){
                if(instance==null){
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }


    public static void main(String[] args) {
        System.out.println(LazySingleton.getInstance().equals(LazySingleton.getInstance()));
    }


}
